package gui.pdf;

import fachklassen.Azubi;
import fachklassen.Fach;
import fachklassen.Note;
import fachklassen.Zeugnis;
import helper.BLError;
import helper.BLWarning;
import helper.Helper;
import helper.StringParser;

import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

import com.itextpdf.text.DocumentException;

/**
 * PDF Layout und Datenausgabe in ZeugnisPDFs.
 *
 * @package		gui
 * @subpackage	pdf
 * @author		Benedikt Schmitz
 */
public class ZeugnisPDF extends BasisPDF {
	
	/**
	 * @see Azubi
	 */
	private Zeugnis zeugnis = null;
	
	/**
	 * Leer Konstruktor,
	 * erzeugt ein leeres Zeugnis nur mit dem Layout.
	 * @author	Benedikt Schmitz
	 */
	public ZeugnisPDF() {
	}
	
	/**
	 * Azubi Konstruktor,
	 * erzeugt ein Zeugnis mit den Daten und Noten des Azubis.
	 * 
	 * @param	a Azubi-Fachklasse
	 * @author	Benedikt Schmitz
	 */
	public ZeugnisPDF(Zeugnis z) {	
		this.zeugnis = z;
	}
	
	/**
	 * Erzeugt das Layout der PDF
	 * 
	 * @author	Benedikt Schmitz
	 * @throws DocumentException 
	 * @throws com.lowagie.text.DocumentException 
	 * @throws IOException 
	 * @throws URISyntaxException 
	 * @throws BLWarning 
	 * @throws BLError 
	 */
	@SuppressWarnings("deprecation")
	public void createLayout() throws DocumentException, com.lowagie.text.DocumentException, IOException, URISyntaxException, BLError, BLWarning {
		String content = "";

        // Content aus xHTML-Datei lesen
        content = new Scanner( new File(getClass().getResource("/resources/pdflayouts/zeugnis.xhtml").toURI())).useDelimiter("\\A").next();
    
        // Platzhalter Ersetzen
        StringParser parser = new StringParser(content);
        parser.add("{#VORNAME#}", this.zeugnis.getAzubi().getVorname());
        parser.add("{#NAME#}", this.zeugnis.getAzubi().getNachname());
        parser.add("{#GEBURTSDATUM#}", new SimpleDateFormat("dd.MM.yyyy").format(zeugnis.getAzubi().getGeburtsdatum()));
        parser.add("{#AUSBILDUNGSBERUF#}", this.zeugnis.getAzubi().getKlasse().getBildungsgang().getBezeichnung());
        parser.add("{#FACHKLASSE#}", this.zeugnis.getAzubi().getKlasse().getBezeichnung());
        parser.add("{#SCHULJAHR#}", String.valueOf(this.zeugnis.getDatum().getYear() - this.zeugnis.getAzubi().getKlasse().getEinschulungsjahr().getYear()));
        int schuljahr = Helper.getSchuljahr(this.zeugnis.getDatum()) + 1;
        parser.add("{#JAHR#}", Helper.getSchuljahr(this.zeugnis.getDatum()) +"/" + schuljahr);
        parser.add("{#FEHLTAGE#}", String.valueOf(this.zeugnis.getFehltage()));
        parser.add("{#FEHLTAGE_UN#}", String.valueOf(this.zeugnis.getUnentschuldigteFehltage()));
        parser.add("{#KONFERRENZDATUM#}", new SimpleDateFormat("dd.MM.yyyy").format(this.zeugnis.getDatum()));
        parser.add("{#DATUM#}", new SimpleDateFormat("dd.MM.yyyy").format(new Date()));
        
        String berufsbezogene = "";
        String berufsuebergreifend = "";
        for (Note n : this.zeugnis.getNoten()) {
			String bezeichnung = n.getFach().getBezeichnung();
			String bewertung = n.getBezeichnung();
			
			if(n.getFach().getTyp() == Fach.Typen.Berufsbezogen)
			{
				berufsbezogene += "<tr>" +
					"<td colspan=\"2\" rowspan=\"2\" class=\"tr5 td2\">" +
					"<p class=\"p1 ft3\">" + bezeichnung + "</p>" +
					"</td>" +
					"<td class=\"tr6 td3\"><p class=\"p1 ft6\">&nbsp;</p></td>" +
			    	"<td class=\"tr6 td4\"><p class=\"p1 ft6\">&nbsp;</p></td>" +
					"</tr>" +
					"<tr>" +
					"<td class=\"tr2 td3\"><p class=\"p1 ft5\">&nbsp;</p></td>" +
					"<td class=\"tr2 td5\"><p class=\"p5 ft7\">- " +
					bewertung + " -</p></td>" +
					"</tr>";
			}
			else
			{
				berufsuebergreifend += "<tr>" +
					"<td colspan=\"2\" rowspan=\"2\" class=\"tr5 td2\">" +
					"<p class=\"p1 ft3\">" + bezeichnung + "</p>" +
					"</td>" +
					"<td class=\"tr6 td3\"><p class=\"p1 ft6\">&nbsp;</p></td>" +
			    	"<td class=\"tr6 td4\"><p class=\"p1 ft6\">&nbsp;</p></td>" +
					"</tr>" +
					"<tr>" +
					"<td class=\"tr2 td3\"><p class=\"p1 ft5\">&nbsp;</p></td>" +
					"<td class=\"tr2 td5\"><p class=\"p5 ft7\">- " +
					bewertung + " -</p></td>" +
					"</tr>";
			}
		}
    
        parser.add("{#BERUFSBEZOGENEFAECHER#}", berufsbezogene);
        parser.add("{#BERUFSUEBERGREIFENDEFAECHER#}", berufsuebergreifend);
 
        parser.run();
        content = parser.getContent();
        
        // Neuen PDF Inhalt abspeichern
        this.save(content);
        
	}
}